package com.lhlk.初始化;

/**
 * 测试类什么时候初始化
 * 1.主动引用（一定为初始化）
 *    new一个对象
 *    类的反射调用
 *    main方法
 * 2.被动引用（不会初始化）
 *    通过子类调用父类的静态变量
 */
public class test1 {
    static {
        System.out.println("main方法");
    }

    public static void main(String[] args) {

        //1.主动引用:(子类初始化一定会先初始化父类)
            Student student=new Student();
        /**
         * 输出结果为：
         *  main方法
         *  父类被加载
         *  子类被加载
         */

        //反射调用也会初始化
        try {
            Class.forName("com.lhlk.初始化.Student");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        //2.被动引用
        System.out.println(Student.a);
        /**
         * 输出结果为：
         *  main方法
         *  父类被加载
         *  1
         */
        //引用子类的常量不会初始化 (常量是final修饰）
        System.out.println(Student.B);

    }
}
class Person{
    static int a=1;
    static {
        System.out.println("父类被加载");
    }
}
class Student extends Person{

    static {
        System.out.println("子类被加载");
    }
    static final int B=2;

}